package 数组;

/**
 * https://leetcode-cn.com/problems/sub-sort-lcci/
 */
public class _部分排序 {
    public static void main(String[] args) {
        
    }
    /**
     * 给定一个整数数组，编写一个函数，找出索引m和n，只要将索引区间[m,n]的元素排好序，整个数组就是有序的。
     * 注意：n-m尽量最小，也就是说，找出符合条件的最短序列。函数返回值为[m,n]，若不存在这样的m和n（例如整个数组是有序的），请返回[-1,-1]。
     * 示例：
     * 输入： [1,2,4,7,10,11,7,12,6,7,16,18,19]
     * 输出： [3,9]
     * 提示：0 <= len(array) <= 1000000
     */
    public int[] subSort(int[] array) {
        //找出最后一个逆序对
        if(array.length <= 0) return new int[]{-1, -1};
        int max = array[0];
        int end = -1;
        for (int i = 1; i < array.length; i++) {//从左往右扫描是逐渐变大的
            if(array[i] < max) {//如果比最大值要小,则是逆序对,记录位置;
                end = i;
            }else{
                max = array[i];
            }
        }
        
        if(end == -1) return new int[]{-1, -1};

        int min = array[array.length - 1];
        int start = -1;
        for (int j = array.length - 1; j >= 0; j--) {//从右往左扫描是逐渐变小的
            if(array[j] > min) {//如果比最小值大,则是逆序对,记录位置
                start = j;
            }else{
                min = array[j];
            }
        }
                                                                                                                                                               
        return new int[] {start, end};
    }
}